package com.hbisdt.cet.sample.service;

import jakarta.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import java.io.File;

/**
 *
 * @author : 教学案例
 * @version : 1.0
 * @date : 2025-05-08 15:52
 */
@Service
public class SendMailService {
    @Autowired
    private JavaMailSender sender;
    @Value("${spring.mail.username}")
    private String from;

    /**
     * 发送纯文本邮件的方法
     * @param toUser  收件人的邮箱地址
     * @param subject 邮件的主题
     * @param content 邮件的正文内容
     */
    public void sendSimpleMail(String toUser, String subject, String content) {
        // 创建一个简单的邮件消息对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置发件人的邮箱地址
        message.setFrom(from);
        // 设置收件人的邮箱地址
        message.setTo(toUser);
        // 设置邮件的主题
        message.setSubject(subject);
        // 设置邮件的正文内容
        message.setText(content);
        try {
            // 使用邮件发送器发送邮件
            sender.send(message);
            System.out.println("纯文本邮件发送成功");
        }catch ( Exception e){
            System.out.println("纯文本邮件发送失败");
            e.printStackTrace();
        }
    }


    /**
     * 发送带附件和图片邮件的方法
     * @param to               收件人邮箱地址
     * @param subject          邮件主题（标题）
     * @param htmlBody         邮件内容
     * @param attachmentPath   附件地址
     * @param imagePath        图片地址
     */
    public void sendEmailWithAttachmentAndImage(
            String to, String subject,
            String htmlBody, String attachmentPath,
            String imagePath)  {
        try{
            MimeMessage message = sender.createMimeMessage();
            //true表示支持多部分内容（HTML，附件，图片等）
            MimeMessageHelper helper =
                    new MimeMessageHelper(message, true);
            //设置发件人邮箱地址
            helper.setFrom(from);
            //设置收件人邮箱地址
            helper.setTo(to);
            //设置邮件主题（标题）
            helper.setSubject(subject);
            //设置HTML正文（包含内联图片的CID引用）
            //true表示HTML内容
            helper.setText(htmlBody, true);
            //添加附件
            if (attachmentPath != null) {
                FileSystemResource file =
                        new FileSystemResource(new File(attachmentPath));
                //添加文件附件
                helper.addAttachment(file.getFilename(), file);
            }
            //添加内联图片（嵌入在HTML中）
            if (imagePath != null) {
                FileSystemResource res =
                        new FileSystemResource(new File(imagePath));
                // "imageId" 是 HTML 中的 CID 引用
                helper.addInline("imageId", res);
            }
            sender.send(message);
            System.out.println("带附件和图片的邮件发送成功");
        }catch (Exception ex){
            ex.printStackTrace();
            System.out.println("带附件和图片的邮件发送失败");
        }
    }

    /**
     * 发送模板邮件的方法
     * @param to          收件人邮箱地址
     * @param subject     邮件主题（标题）
     * @param htmlBody    邮件内容
     */
    public void sendTemplateEmail(
            String to, String subject, String htmlBody)  {
        try{
            MimeMessage message = sender.createMimeMessage();
            //true表示支持多部分内容（HTML，附件，图片等）
            MimeMessageHelper helper =
                    new MimeMessageHelper(message, true);
            //设置发件人邮箱地址
            helper.setFrom(from);
            //设置收件人邮箱地址
            helper.setTo(to);
            //设置邮件主题（标题）
            helper.setSubject(subject);
            //设置HTML正文
            //true表示HTML内容
            helper.setText(htmlBody, true);
            //发送邮件
            sender.send(message);
            System.out.println("模板邮件发送成功");
        }catch (Exception ex){
            ex.printStackTrace();
            System.out.println("模板邮件发送失败");
        }
    }
}
